SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[SP_TWSACA_REPO_Q91] 
/*-------------------------------------------------------*/
/*---Empresa              : OFISIS S.A.                --*/
/*---Cliente              : OFISIS 			--*/
/*---Sistema              : CALCULOS SALDOS CAja     --*/
/*---M+dulo               : Empresa                    --*/
/*---Programa             : CALCULA SALDO INICIAL	--*/
/*---Script               : TMSABA_M.SQL	       	--*/
/*---Nombre SP            : SP_TWSACA_REPO_Q91		--*/
/*---Desarrollado por     : DCHIANG		       --*/
/*---Fecha Creacion	  : 21/02/2005		       --*/ 
/*---Base Datos           : SQLSERVER 			--*/
/*---Versi+n              : 8.0                        --*/
/*---Invoca a SP          :                            --*/
/*-------------------------------------------------------*/
/*-------------------------------------------------------*/
/*---Modificado 1 por     : DCHIANG		       --*/
/*---Fecha Modificaci+n   : 21/02/2005			 --*/ 
/*---Detalle Modificaci+n : A SQL		       --*/
/*-------------------------------------------------------*/

/*-------------------------------------------------------*/
/*---Comentarios                                       --*/
/*---                                                  --*/
/*---                                                  --*/
/*-------------------------------------------------------*/

/*--------------------------------------------------------------------- */
/* Drop Proc SP_TWSACA_REPO_Q91			 	 		*/
/* Grant All On SP_TWSACA_REPO_Q91 To Public	 			*/
/* SP_TWSACA_REPO_Q91'10', '001' , null 	   			*/
/*----------------------------------------------------------------------*/
@IDFE_OPER TD_DT_001
	As
DECLARE
@CSCO_EMPR	TD_VC_002,
@CSCO_CAJA	TD_VC_008,
@VSAA_MINI TD_VC_004,
@VSMM_MINI TD_VC_002,


/*Variables*/
@VNIM_INGR     	NUMERIC(16,4),
@VNIM_EGRE		NUMERIC(16,4),
@VNIM_SALD_INIC	NUMERIC(16,4),
@VNIM_SALD_MINI	NUMERIC(16,4)


DECLARE CU_TMCAJA_Q01_1 CURSOR FOR 
SELECT CO_EMPR , CO_CAJA
FROM TMCAJA 


-- PARA CALCULAR EL SALDO INICIAL DEL PRIMER PERIODO DE LAS CUENTAS
Open CU_TMCAJA_Q01_1
FETCH CU_TMCAJA_Q01_1 INTO @CSCO_EMPR , @CSCO_CAJA
WHILE (@@FETCH_STATUS = 0)
 Begin
	
	IF (@@FETCH_STATUS < 0)
	    Begin
		RAISERROR 20001 "FIN DE ARCHIVO"
		CLOSE CU_TMCAJA_Q01_1
		DEALLOCATE CU_TMCAJA_Q01_1
		RETURN
	    End


	SELECT @VSAA_MINI = MIN( AA_CAJA)
	FROM TMSACA_MENS
	WHERE RTRIM(CO_EMPR) = RTRIM(@CSCO_EMPR)
	AND RTRIM(CO_CAJA) = RTRIM(@CSCO_CAJA)

	SELECT @VSMM_MINI = MIN( MM_CAJA)
	FROM TMSACA_MENS
	WHERE RTRIM(CO_EMPR) = RTRIM(@CSCO_EMPR)
	AND RTRIM(CO_CAJA) = RTRIM(@CSCO_CAJA)
	AND RTRIM(AA_CAJA) = RTRIM(@VSAA_MINI)

	IF @VSAA_MINI IS NOT NULL AND @VSMM_MINI IS NOT NULL 
	   Begin 

		SELECT @VNIM_SALD_MINI = IM_SALD_INIC
		FROM TMSACA_MENS
		WHERE RTRIM(CO_EMPR) = RTRIM(@CSCO_EMPR)
		AND RTRIM(CO_CAJA) = RTRIM(@CSCO_CAJA)
		AND RTRIM(AA_CAJA) = RTRIM(@VSAA_MINI)
		AND RTRIM(MM_CAJA) = RTRIM(@VSMM_MINI)

		INSERT INTO #TWSACA_REPO_AUXI( CO_EMPR, CO_CAJA, IM_SALD_INIC)
		VALUES( @CSCO_EMPR, @CSCO_CAJA, @VNIM_SALD_MINI)

	   End

	Fetch CU_TMCAJA_Q01_1 INTO @CSCO_EMPR , @CSCO_CAJA

End

CLOSE CU_TMCAJA_Q01_1
DEALLOCATE CU_TMCAJA_Q01_1


/*
INSERT INTO #TWSACA_REPO (CO_EMPR, CO_CAJA, IM_SALD_INIC)
SELECT CO_EMPR, CO_CAJA, 
ISNULL(SUM( ISNULL(PATINDEX( TI_MOVI, 'I')*IM_MOVI, 0) - ISNULL(PATINDEX( TI_MOVI, 'E')*IM_MOVI,0) ), 0)
FROM TCMOVI_CAJA
WHERE FE_OPER < @IDFE_OPER
AND TI_SITU = 'ACT' 
GROUP BY CO_EMPR, CO_CAJA

*/

-- CURSOR DE TODAS LAS CUENTAS
DECLARE CU_TMCAJA_Q01_2 CURSOR FOR 
SELECT CO_EMPR , CO_CAJA
FROM TMCAJA

Open CU_TMCAJA_Q01_2
FETCH CU_TMCAJA_Q01_2 INTO @CSCO_EMPR , @CSCO_CAJA

WHILE (@@FETCH_STATUS = 0)
Begin
	
	IF (@@FETCH_STATUS < 0)
	    Begin
		RAISERROR 20001 "FIN DE ARCHIVO"
		CLOSE CU_TMCAJA_Q01_2
		DEALLOCATE CU_TMCAJA_Q01_2
		RETURN
	    End


	SELECT @VNIM_INGR = ISNULL(SUM ( ISNULL(IM_MOVI,0)) , 0)
	FROM TCMOVI_CAJA
	WHERE TI_SITU = 'ACT'
	AND TI_MOVI  = 'I'
	AND CO_EMPR = @CSCO_EMPR
	AND CO_CAJA = @CSCO_CAJA
	AND FE_OPER < @IDFE_OPER

	SELECT @VNIM_EGRE = ISNULL(SUM ( ISNULL(IM_MOVI,0)) , 0)
	FROM TCMOVI_CAJA
	WHERE TI_SITU = 'ACT'
	AND TI_MOVI = 'E'
	AND CO_EMPR = @CSCO_EMPR
	AND CO_CAJA = @CSCO_CAJA
	AND FE_OPER < @IDFE_OPER


	SELECT @VNIM_SALD_INIC = ISNULL(@VNIM_INGR, 0) - ISNULL( @VNIM_EGRE,0)


	INSERT INTO #TWSACA_REPO(CO_EMPR, CO_CAJA, IM_SALD_INIC)
	VALUES( @CSCO_EMPR, @CSCO_CAJA, @VNIM_SALD_INIC )

	Fetch CU_TMCAJA_Q01_2 INTO @CSCO_EMPR , @CSCO_CAJA

End

CLOSE CU_TMCAJA_Q01_2
DEALLOCATE CU_TMCAJA_Q01_2


-- INSERTO CUENTAS QUE NO HAN TENIDO MOVIMIENTOS, ES DECIR AUN NO ESTAN GRABADAS EN TABLA #TWSABA REPO

INSERT INTO #TWSACA_REPO( CO_EMPR, CO_CAJA, IM_SALD_INIC )
SELECT T2.CO_EMPR, T2.CO_CAJA, 0
FROM TMCAJA T2
WHERE NOT EXISTS
(SELECT T1.CO_EMPR FROM #TWSACA_REPO T1
WHERE RTRIM(T1.CO_EMPR) = RTRIM(T2.CO_EMPR)
AND RTRIM(T1.CO_CAJA) = RTRIM(T2.CO_CAJA) )

-- ACTUALIZO EL SALDO INICIAL MAS EL SALDO INICIAL DEL PRIMER PERIODO QUE SE ABRIO
UPDATE #TWSACA_REPO 
SET #TWSACA_REPO.IM_SALD_INIC =  ( SELECT ISNULL(T2.IM_SALD_INIC,0) + ISNULL(#TWSACA_REPO.IM_SALD_INIC,0) FROM 
#TWSACA_REPO_AUXI T2
							  WHERE RTRIM(#TWSACA_REPO.CO_EMPR) = RTRIM(T2.CO_EMPR)
							  AND RTRIM(#TWSACA_REPO.CO_CAJA) = RTRIM(T2.CO_CAJA) )
WHERE EXISTS( SELECT T3.CO_EMPR
FROM #TWSACA_REPO_AUXI T3
WHERE #TWSACA_REPO.CO_EMPR = T3.CO_EMPR
AND #TWSACA_REPO.CO_CAJA = T3.CO_CAJA)


/*------------------------------ FIN ---------------------------------*/


GO
